home *** CD-ROM | disk | FTP | other *** search
/ Workbench Design / WB Collection.iso / workbench werkzeuge / patches / fixsprite / fixsprite.c < prev    next >
C/C++ Source or Header  |  1996-04-07  |  5KB  |  156 lines

  1. /**************************************************************************
  2. *        
  3. *                           Program : FixSprite
  4. *                           Author  : Adam Nelson
  5. *                           Version : 1.03
  6. *
  7. * History
  8. * -------
  9. *
  10. * Version 1.03 (27/04/94)
  11. * -----------------------
  12. * No code changes, just re-compiled with SAS/C version 6.50.
  13. * Version 1.02 (30/01/94)
  14. * -----------------------
  15. * Added a command line option to disable the AutoRequester.
  16. * First Public release.
  17. *
  18. * Version 1.01 (29/01/94)
  19. * -----------------------
  20. * Changed Ctrl-F checking to Ctrl-C for compatibility.
  21. * An AutoRequest will now be displayed when program is sent a Ctrl-C.
  22. * Small optimisations.
  23. *
  24. * Version 1.00 (25/01/94)
  25. * -----------------------
  26. * Initial release.
  27. *
  28. **************************************************************************/
  29.  
  30. #include <intuition/intuition.h>
  31. #include <graphics/sprite.h>
  32. #include <libraries/dos.h>
  33. #include <stdio.h>
  34.  
  35. void ReleaseResources();
  36.  
  37. struct IntuitionBase *IntuitionBase = NULL;
  38. struct GfxBase *GfxBase = NULL;
  39.  
  40. struct SimpleSprite EmptySprite=
  41. {
  42.     NULL,           /* We don't want an image, and we have no data!       */
  43.     0,              /* The height is 0 pixels tall.                       */
  44.     0, 0,           /* The sprite's x/y coordinates on the screen.        */
  45.     -1,             /* Don't worry about this...                          */
  46. };
  47.  
  48. struct IntuiText BodyText=
  49. {
  50.     0,              /* FrontPen, colour 0.                                */
  51.     0,              /* BackPen, not used.                                 */
  52.     JAM1,           /* DrawMode, do not change the background.            */
  53.     15,             /* LedtEdge, 15 pixels out.                           */
  54.     5,              /* TopEdge, 5 lines down.                             */
  55.     NULL,           /* ITextFont, default font.                           */
  56.     "FixSprite V1.03 terminated. Sprite deallocated.",    /* The text.    */
  57.     NULL,           /* No more IntuiText structures link.                 */
  58. };
  59.  
  60. struct IntuiText OkayText=
  61. {
  62.     0,              /* FrontPen, colour 0.                                */
  63.     0,              /* BackPen, not used.                                 */
  64.     JAM1,           /* DrawMode, do not change the background.            */
  65.     6,              /* LeftEdge, 6 pixels out.                            */
  66.     3,              /* TopEdge, 3 lines down.                             */
  67.     NULL,           /* ITextFont, default font.                           */
  68.     "OK",           /* IText, the text that will be printed.              */
  69.     NULL,           /* No more IntuiText structures link.                 */
  70. };
  71.  
  72. main(argc,argv)
  73. int argc;
  74. char *argv[];
  75. {
  76.     char *VersionString = "$VER: FixSprite V1.03 (27/04/94)";
  77.     char VersionNumber[] = "1.03";
  78.     static char NoReqString[] = "NOREQUESTER";
  79.     char *KeyWord = NoReqString;
  80.     long SpriteNumber;
  81.     BOOL NoRequester = FALSE;
  82.     BOOL NotOkay = FALSE;
  83.  
  84.     if(argc < 2 || argc > 3)  /* If not the correct number of arguments... */
  85.     {
  86.         printf("FixSprite V%s ©1994 Adam Nelson.\n",VersionNumber);
  87.         printf("USAGE: FixSprite n <NOREQUESTER> where n is the sprite number from 0 to 7.\n");
  88.         printf("       Use the NOREQUESTER keyword if you do not want a requester\n       to be displayed on exit.\n");
  89.         exit(0);
  90.     }
  91.  
  92.     SpriteNumber = atol(argv[1]);  /* Get the sprite number from user */
  93.  
  94.     if(SpriteNumber < 0 || SpriteNumber > 7)  /* If out of range... */
  95.     {
  96.         printf("FATAL ERROR: Illegal sprite number.\n");
  97.         exit(0);
  98.     }
  99.  
  100.     if(argc == 3)  /* If the user specified three arguments... */
  101.     {              /* Check to make sure the third is 'norequester' */
  102.         do         
  103.             if(tolower(*KeyWord) != tolower(*argv[2]))
  104.                 NotOkay = TRUE;
  105.         while(argv[2]++,*KeyWord++);
  106.     }
  107.     else  /* If there was only one argument, then show a requester */
  108.         NotOkay = TRUE;
  109.  
  110.     if(!NotOkay)   /* If it was 'norequester'... */
  111.         NoRequester = TRUE;
  112.  
  113.     IntuitionBase = (struct IntuitionBase *)
  114.     OpenLibrary("intuition.library", 0);
  115.   
  116.     if(IntuitionBase == NULL)
  117.         ReleaseResources();       /* Could NOT open the Intuition Library! */
  118.  
  119.     GfxBase = (struct GfxBase *)
  120.         OpenLibrary("graphics.library", 0);
  121.  
  122.     if(GfxBase == NULL)
  123.         ReleaseResources();       /* Could NOT open the Graphics Library! */
  124.  
  125.     if(GetSprite(&EmptySprite, SpriteNumber) != SpriteNumber)  /* If we couldn't get a sprite... */
  126.         {
  127.         printf("FATAL ERROR: Could not use sprite number %d. Sprite is in use.\n",SpriteNumber);
  128.         ReleaseResources(); /* Could not reserve sprite number SpriteNumber. */
  129.         }
  130.  
  131.     printf("FixSprite V%s ©1994 Adam Nelson.\n",VersionNumber);
  132.     printf("Sprite number %d allocated.\n",SpriteNumber);
  133.     Wait(SIGBREAKF_CTRL_C);  /* Wait forever until sent a Ctrl-C */
  134.     printf("Sprite number %d deallocated.\n",SpriteNumber);
  135.  
  136.     if(!NoRequester)  /* If user didn't specify NOREQUESTER... */
  137.         AutoRequest(NULL,&BodyText,NULL,&OkayText,NULL,NULL,320,72);
  138.  
  139.     ReleaseResources();  /* Free all allocated memory, close libraries etc. */
  140. }
  141.  
  142. void ReleaseResources()
  143. {
  144.     if(EmptySprite.num != -1)  /* If the sprite was allocated, free it.    */
  145.         FreeSprite(EmptySprite.num);
  146.  
  147.     if(GfxBase)                /* If graphics.library was open, close it.  */
  148.         CloseLibrary(GfxBase);
  149.  
  150.     if(IntuitionBase)          /* If intuition.library was open, close it. */
  151.         CloseLibrary(IntuitionBase);
  152.  
  153.     exit(0);
  154. }
  155.